package com.zhuangxiaoyan.designpattern.singletonmodel;

/**
 * 懒汉式（线程安全，同步代码块）
 * 1）构造器私有化
 * 2）类的内部创建对象
 * 3）向外暴露一个静态的公共方法，加入同步处理的代码块
 *
 * 但是这种同步并不能起到线程同步的作用。跟第3种实现方式遇到的情形一致，
 * 假如一个线程进入了判断语句块，还未来得及往下执行，
 * 另一个线程也通过了这个判断语句，这时便会产生多个实例
 */
public class SingletonDemo9 {

    // 1、构造器私有化
    private SingletonDemo9() {
    }

    // 2、类的内部声明对象
    private static SingletonDemo9 instance;

    // 3、向外暴露一个静态的公共方法，加入同步处理的代码，解决线程安全问题
    public static SingletonDemo9 getInstance() {
        if (instance == null) {
            synchronized (SingletonDemo9.class) {
                instance = new SingletonDemo9();
            }
        }
        return instance;
    }
}
